/*
* This file is a part of the open-eBackup project.
* This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
* If a copy of the MPL was not distributed with this file, You can obtain one at
* http://mozilla.org/MPL/2.0/.
*
* Copyright (c) [2024] Huawei Technologies Co.,Ltd.
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
*/
#ifndef VOLUMEBACKUP_DM_LOOP_DEVICE_CONTROL_H
#define VOLUMEBACKUP_DM_LOOP_DEVICE_CONTROL_H

#ifdef __linux__

#include <string>
#include <cstdint>

namespace volumeprotect {
namespace loopback {

/*
 * manage loopback device list, creation and delete
 * reference url
 * https://android.googlesource.com/platform/system/core/+/refs/heads/main/fs_mgr/libdm/include/libdm/loop_control.h
 */

bool Attach(const std::string& filepath, std::string& loopDevicePath, uint32_t flag);
bool Attach(int fileFd, std::string& loopDevicePath);

bool Detach(const std::string& loopDevicePath);
bool Detach(int loopFd);

bool Attached(const std::string& loopDevicePath);

bool GetFreeLoopDevice(std::string& loopDevicePath);

}
}

#endif
#endif